home *** CD-ROM | disk | FTP | other *** search
Text File | 1994-02-25 | 7.7 KB | 321 lines | [TEXT/MPS ] |
- UNIT SVEditAEUtils;
-
- (*
- SVEditAEUtils.p
-
- Version 3.0d8
-
- Copyright © SRL Data 1992, 1993
-
- All rights reserved
-
- Produced by : SRL Data
- Originally Developed for UK.DTS
-
- *)
-
- INTERFACE
-
- USES
- Types,
- QuickDraw,
- Packages,
- GestaltEqu,
- Editions,
- Printing,
- AppleEvents;
-
- (**-----------------------------------------------------------------------
- Utility Routines for getting data from AEDesc's
- -----------------------------------------------------------------------**)
-
- PROCEDURE GetRawDataFromDescriptor(theDesc : AEDesc;
- destPtr : Ptr;
- destMaxSize : Size;
- VAR actSize : Size);
-
- FUNCTION GetPStringFromDescriptor(sourceDesc : AEDesc;VAR resultStr : Str255):OSErr;
-
- FUNCTION GetIntegerFromDescriptor(sourceDesc : AEDesc; VAR result:INTEGER): OSErr;
-
- FUNCTION GetBooleanFromDescriptor(sourceDesc : AEDesc;
- VAR result : Boolean): OSErr;
-
- FUNCTION GetLongIntFromDescriptor(sourceDesc : AEDesc;
- VAR result : longInt):OSErr;
-
- FUNCTION GetRectFromDescriptor(sourceDesc : AEDesc;
- VAR result : Rect):OSErr;
-
- FUNCTION GetPointFromDescriptor(sourceDesc : AEDesc;
- VAR result : Point):OSErr;
-
- FUNCTION GetStyledTextFromDescIntoTEHandle(VAR sourceTextDesc:AEDesc;
- theHTE:TEHandle):OSErr;
-
- IMPLEMENTATION
-
- USES Menus,
- AERegistry,
-
- SVEditGlobals,
- SVEditUtils;
-
- PROCEDURE GetRawDataFromDescriptor( theDesc : AEDesc;
- destPtr : Ptr;
- destMaxSize : Size;
- VAR actSize : Size);
- VAR copySize : Size;
-
- BEGIN
- IF (theDesc.dataHandle<>nil) THEN
- BEGIN
- hLock(Handle(theDesc.dataHandle));
- actSize := GetHandleSize(Handle(theDesc.dataHandle));
-
- copySize := LesserOf(actSize, destMaxSize);
-
- BlockMove(theDesc.dataHandle^, destPtr, copySize);
-
- hUnlock(Handle(theDesc.dataHandle));
- END
- ELSE
- actSize := 0;
- END; (*GetRawDataFromDescriptor*)
-
- FUNCTION GetPStringFromDescriptor(sourceDesc : AEDesc;
- VAR resultStr: Str255):OSErr;
- VAR myErr : OSErr;
- ignoreErr : OSErr;
- stringSize : Size;
- resultDesc : AEDesc;
-
- BEGIN
- resultDesc.dataHandle := nil;
-
- resultStr := '';
- myErr := AECoerceDesc(sourceDesc,typeChar,resultDesc);
-
- IF (myErr=noErr) THEN
- GetRawDataFromDescriptor(resultDesc,
- Ptr(ORD4(@resultStr)+1),
- 255,
- stringSize);
- IF (stringSize<256) THEN
- resultStr[0]:=CHR(stringSize)
- ELSE
- myErr := errAECoercionFail;
-
- IF (resultDesc.dataHandle<>NIL) THEN
- ignoreErr:= AEDisposeDesc(resultDesc);
-
- GetPStringFromDescriptor := myErr;
- END;
-
- FUNCTION GetIntegerFromDescriptor(sourceDesc : AEDesc;
- VAR result : INTEGER):OSErr;
- VAR myErr : OSErr;
- ignoreErr : OSErr;
- intSize : Size;
- resultDesc : AEDesc;
-
- BEGIN
- result := 0;
- myErr := AECoerceDesc(sourceDesc,typeShortInteger,resultDesc);
-
- IF (myErr=noErr) THEN
- BEGIN
- GetRawDataFromDescriptor(resultDesc,
- @result,
- 2,
- intSize);
- IF (intSize>2) THEN
- myErr := errAECoercionFail;
- END;
-
- IF (resultDesc.dataHandle<>NIL) THEN
- ignoreErr := AEDisposeDesc(resultDesc);
-
- GetIntegerFromDescriptor := myErr;
- END;
-
-
- FUNCTION GetBooleanFromDescriptor(sourceDesc : AEDesc;
- VAR result : Boolean):OSErr;
- VAR myErr : OSErr;
- ignoreErr : OSErr;
- boolSize : Size;
- resultDesc : AEDesc;
-
- BEGIN
- result := FALSE;
- myErr := AECoerceDesc(sourceDesc,typeBoolean,resultDesc);
-
- IF (myErr=noErr) THEN
- BEGIN
- GetRawDataFromDescriptor(resultDesc,
- @result,
- sizeOf(Boolean),
- boolSize);
- IF (boolSize>sizeOf(Boolean)) THEN
- myErr := errAECoercionFail;
- END;
-
- IF (resultDesc.dataHandle<>NIL) THEN
- ignoreErr := AEDisposeDesc(resultDesc);
-
- GetBooleanFromDescriptor := myErr;
- END;
-
- FUNCTION GetLongIntFromDescriptor(sourceDesc : AEDesc;
- VAR result : longInt):OSErr;
- VAR myErr : OSErr;
- ignoreErr : OSErr;
- intSize : Size;
- resultDesc : AEDesc;
-
- BEGIN
- result := 0;
- myErr := AECoerceDesc(sourceDesc,typeLongInteger,resultDesc);
-
- IF (myErr=noErr) THEN
- BEGIN
- GetRawDataFromDescriptor(resultDesc,
- @result,
- 4,
- intSize);
- IF (intSize>4) THEN
- myErr := errAECoercionFail;
- END;
-
- IF (resultDesc.dataHandle<>NIL) THEN
- ignoreErr := AEDisposeDesc(resultDesc);
-
- GetLongIntFromDescriptor := myErr;
- END; (*GetLongIntFromDescriptor*)
-
- FUNCTION GetRectFromDescriptor(sourceDesc : AEDesc;
- VAR result : Rect):OSErr;
- VAR myErr : OSErr;
- ignoreErr : OSErr;
- rectSize : Size;
- resultDesc : AEDesc;
-
- BEGIN
- SetRect(result,0,0,0,0);
- myErr := AECoerceDesc(sourceDesc,typeQDRectangle,resultDesc);
-
- IF (myErr=noErr) THEN
- BEGIN
- GetRawDataFromDescriptor(resultDesc,
- @result,
- sizeof(Rect),
- rectSize);
- IF (rectSize<sizeof(rect)) THEN
- myErr := errAECoercionFail;
- END;
-
- IF (resultDesc.dataHandle<>NIL) THEN
- ignoreErr := AEDisposeDesc(resultDesc);
-
- GetRectFromDescriptor := myErr;
- END; (*GetRectFromDescriptor*)
-
- FUNCTION GetPointFromDescriptor(sourceDesc : AEDesc;
- VAR result : Point):OSErr;
- VAR myErr : OSErr;
- ignoreErr : OSErr;
- ptSize : Size;
- resultDesc : AEDesc;
-
- BEGIN
- SetPt(result,0,0);
-
- myErr := AECoerceDesc(sourceDesc,typeQDPoint,resultDesc);
-
- IF (myErr=noErr) THEN
- BEGIN
- GetRawDataFromDescriptor(resultDesc,
- @result,
- sizeof(Point),
- ptSize);
-
- IF (ptSize<sizeof(Point)) THEN
- myErr := errAECoercionFail;
-
- END;
-
- IF (resultDesc.dataHandle<>NIL) THEN
- ignoreErr := AEDisposeDesc(resultDesc);
-
- GetPointFromDescriptor := myErr;
- END; (*GetPointFromDescriptor*)
-
- (*
- Name: GetStyledTextFromDescIntoTEHandle
- Purpose: Takes the text in an AEDesc containing typeIntlText and puts it in
- a styled text edit record at the current insertion point.
- Looks for typeIntlText, typeStyledText, typeChar in that order.
- *)
-
- FUNCTION GetStyledTextFromDescIntoTEHandle(VAR sourceTextDesc:AEDesc; theHTE:TEHandle):OSErr;
- VAR
- styledTextDesc : AEDesc;
- textStyleDesc : AEDesc;
- rawTextDesc : AEDesc;
- myErr : OSErr;
- ignoreErr : OSErr;
-
- BEGIN
- styledTextDesc.dataHandle := nil;
- textStyleDesc.dataHandle := nil;
- rawTextDesc.dataHandle := nil;
-
- {
- Coerce to an AERecord and then extract the parts of the
- styled text - works for typeIntlText, typeStyledText
- }
-
- myErr := AECoerceDesc(sourceTextDesc, typeAERecord, styledTextDesc);
-
- IF (myErr=noErr) THEN
- BEGIN
- myErr := AEGetKeyDesc(styledTextDesc,
- keyAEText,
- typeChar,
- rawTextDesc);
-
- myErr := AEGetKeyDesc(styledTextDesc,
- keyAEStyles,
- typeScrapStyles,
- textStyleDesc);
- END
- ELSE
- BEGIN
- myErr := AECoerceDesc(sourceTextDesc, typeChar, rawTextDesc);
-
- textStyleDesc.dataHandle := nil; (* so that TEStylInsert acts like TEInsert *)
- END;
-
- HLock(Handle(rawTextDesc.dataHandle));
-
- TEStylInsert(rawTextDesc.dataHandle^,
- GetHandleSize(rawTextDesc.dataHandle),
- StScrpHandle(textStyleDesc.dataHandle),
- theHTE);
-
- HUnlock(Handle(rawTextDesc.dataHandle));
-
- IF (textStyleDesc.dataHandle<>nil) THEN
- ignoreErr := AEDisposeDesc(textStyleDesc);
-
- IF (rawTextDesc.dataHandle<>nil) THEN
- ignoreErr := AEDisposeDesc(rawTextDesc);
-
- IF (styledTextDesc.dataHandle<>nil) THEN
- ignoreErr := AEDisposeDesc(styledTextDesc);
-
- GetStyledTextFromDescIntoTEHandle := myErr;
- END;
-
- END.